#include <REGX52.H>
#include <LED.h>
#include <Delay.h>
#include "func.h"
#include "timer.h"

sbit Key1 = P3^1;
sbit Key2 = P3^0;
sbit Key3 = P3^2;
sbit Key4 = P3^3;

void basic(){
	// 当Key1被按下时
	if(!Key1){
		//前沿消抖
			Delay(10);
		// 确定Key1被按下时
			while(!Key1);
		// 反转TR0工作状态
			TR0 = ~TR0;
		// 并让Timer0复位
			T0_reset();
		// 若TR0置一（开始工作）则LED立刻点亮
		// 若TR0清零（停止工作）则LED立刻熄灭
			LED1 = ~TR0;
		// 后沿消抖
			Delay(10);
		}
}

// 设置全局变量Key1_Status用来存储Key1的状态
unsigned char Key1_Status = 1;

void KeyCheck(){
	// 起始未按下 用于存储按键状态的变量keybuf 最开始置全1
	static unsigned char keybuf = 0xFF;
	// 每次将新检测到的Key1状态存储到最低位
	keybuf = (keybuf << 1) | Key1;
	// 当keybuf为全0时，可得按键被按下
	if(keybuf == 0x00){
		// 检测之前是否为高电平
		if(Key1_Status){
			// 若是则反转TR0状态（下降沿触发）
			TR0 = ~TR0;
			// 若反转后TR0不工作则同时将LED熄灭
			if(!TR0){
				LED1 = 1;
			// 并让Timer0复位
			T0_reset();
			}
		}
		// 并将按键引脚状态设置为0
		Key1_Status = 0;
	}
	
	// 当keybuf为全1时，可得此时已经松手
	if(keybuf == 0xFF){
		// 则将按键引脚状态设置为1
		Key1_Status = 1;
	}
}

